如果要cout像以下這樣的格式時,該怎麼做呢?
這樣的cout困難點在於:數字跟字串長度不固定。
這樣導致第二行最後面的"="難以對齊
設一個counter,記錄每個字串的長度
int counter = 0;
對於字串,counter加上字串的長度
string name = "AIG";
counter += name.length();
對於數字,先經過std::to_string( ),再加上其長度
int id = 19;
string s_id = std::to_string(id);
counter += s_id.length();
最後在輸出line: 的時候,做setw( )跟right的配合
int lineNo = 200;
string s_lineNo = std::to_string(lineNo);
cout << setw(38-counter) << right << s_lineNo;
最後就可以輸出=啦!
cout << "=" << endl;
希望這個內容可以幫助你們對於一些不簡單的os輸出格式有不同的想法。感謝收看!
這樣不就好了,不必要計算字串長度阿,假設輸出固定38個字元寬度,把你的right改成left就好了。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << "======================================" << endl;
cout << left << setw(37) << "Hello World" << "=" << endl;
cout << "======================================" << endl;
return 0;
}
簡單的情況確實如此就可以啦~
但是更複雜一點的情況,比方說一行中輸出2個以上的數字與字串且都沒有限定字元寬度的情況,可能就需要counter這樣。
ex:
string s;
int num;
std::cin >> s >> num;
此時如果要cout << s << " " << num
且讓此行最後面第50字元處有一個"="該怎麼做呢~
當然我的解法也不一定是最好的,如果有更好的方法歡迎提供。謝謝!
用string format轉成字串再一起輸出阿...
不然直接把num轉成string,直接加在後面再輸出也行
int a = 30;
string b = "Hellow World";
cout << left << setw(37) << b + to_string(a) << "=" << endl;
針對全部轉成string的作法,如果是要cout
也可以把string先全部放到ostringstream,再一次cout就可以了。
#include <sstream>
ostringstream osstr;
int a = 30;
string b = "Hello";
string c = "World";
osstr << b << " " << c;
osstr << to_string(a);
cout << "=" << setw(37) << left << osstr.str() << "=" << endl;